package com.dailywork.basepro.math;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MathOper {

    public static void main(String[] args) {
        log.info("MathOper");
        trigonometricFunction();
        System.out.println("**************************");
        exponentFunction();
        System.out.println("**************************");
        intFuncOper();
        System.out.println("**************************");
        anyFuncOper();
    }

    private static void trigonometricFunction() {
        // 取90度的正弦
        System.out.println("90度的正弦值：" + Math.sin(Math.PI / 2));
        // 取0度的余弦
        System.out.println("0度的余弦值：" + Math.cos(0));
        // 取60度的正切
        System.out.println("60度的正切值：" + Math.tan(Math.PI / 3));
        // 取2的平方根与2商的反正弦
        System.out.println("2的平方根与2商的反弦值：" + Math.asin(Math.sqrt(2) / 2));
        // 取2的平方根与2商的反余弦
        System.out.println("2的平方根与2商的反余弦值：" + Math.acos(Math.sqrt(2) / 2));
        // 取1的反正切
        System.out.println("1的反正切值：" + Math.atan(1));
        // 取120度的弧度值
        System.out.println("120度的弧度值：" + Math.toRadians(120.0));
        // 取π/2的角度
        System.out.println("π/2的角度值：" + Math.toDegrees(Math.PI / 2));
    }

    private static void exponentFunction() {
        // 取e的2次方
        System.out.println("e的平方值：" + Math.exp(2));
        // 取以e为底2的对数
        System.out.println("以e为底2的对数值：" + Math.log(2));
        // 取以10为底2的对数
        System.out.println("以10为底2的对数值：" + Math.log10(2));
        // 取4的平方根
        System.out.println("4的平方根值：" + Math.sqrt(4));
        // 取8的立方根
        System.out.println("8的立方根值：" + Math.cbrt(8));
        // 取2的2次方
        System.out.println("2的2次方值：" + Math.pow(2, 2));
    }

    private static void intFuncOper() {
        // 返回第一个大于等于参数的整数
        System.out.println("5.2 使用ceil()方法取整：" + Math.ceil(5.2));
        // 返回第一个小于等于参数的整数
        System.out.println("2.5 使用floor()方法取整：" + Math.floor(2.5));
        // 返回与参数最接近的整数
        System.out.println("2.7 使用rint()方法取整：" + Math.rint(2.7));
        // 返回与参数最接近的整数
        System.out.println("2.5 使用rint()方法取整：" + Math.rint(2.5));
        // 将参数加上0.5后返回最接近的整数
        System.out.println("3.4f 使用round()方法取整：" + Math.round(3.4f));
        // 将参数加上0.5后返回最接近的整数，并将结果强制转换为长整型
        System.out.println("2.5 使用round()方法取整：" + Math.round(2.5));
    }

    private static void anyFuncOper() {
        System.out.println("4和8较大者:" + Math.max(4, 8));
        // 取两个参数的最小值
        System.out.println("4.4和4较小者：" + Math.min(4.4, 4));
        // 取参数的绝对值
        System.out.println("-7的绝对值：" + Math.abs(-7));
    }
}
